Rust から C の関数を呼び出す
code:lib.c
int add(int x, int y) {
return x + y;
}
code:lib.h
int add(int x, int y);
上記の add 関数を呼び出すには、以下のように記述する
code:rs
use std::os::raw::c_int;
extern "C" {
pub fn add(x: c_int, y: c_int) -> c_int;
}
extern "C" は関数の定義を外部 C 言語のライブラリが提供することを示す
これを付けた関数は自動的に no_mangle (マングリング が無効)となる warning.icon
Rust の FFI コードは自動的に unsafe になる ため、unsafe { } で囲む必要がある ∵ 上記のコードでは、C 言語で使われている int 型が std::os::raw::c_int と対応しているが、等しくない可能性があるため
したがって、C 言語では <stdint.h> で定義されている型(e.g. uint32_t)を使おう
int や long、size を使っているコードの場合は諦める
C とRust の宣言が一致しなくても、ビルドツールは警告を出さないため実行するまで分からない